package com.meatball.dji.common.mqtt.topic

/**
 *  @TODO 定义大疆无人机的topic
 *  * 为了方便设备云平台区分不同属性的处理策略，将设备上报物模型属性分为 osd 和 state 两类，分别用不同的 topic 上报
 *  * osd：设备定频上报的属性，对应 pushmode = 0。
 *  * state：设备事件性上报的物模型属性，对应 pushmode=1。
 *
 *  @author 张翔宇
 *  @since 2024年4月18日
 */
object TopicConstants {
    // 设备端定频向云平台推送的设备属性（properties）
    const val OSD_MESSAGE_STRUCT = "thing/product/+/osd"

    // 设备端按需上报向云平台推送的设备属性（properties）
    const val STATE_MESSAGE_STRUCT = "thing/product/{device_sn}/state"

    // 云平台向设备发送的服务
    const val SERVICES_MESSAGE_STRUCT = "thing/product/{gateway_sn}/services"

    // 设备对 service 的回复、处理结果
    const val SERVICES_REPLY_MESSAGE_STRUCT = "thing/product/{gateway_sn}/services_reply"

    //设备端向云平台发送的，需要关注和处理的事件。
    //比如SD满了，飞机解禁禁飞区等信息
    const val EVENTS_MESSAGE_STRUCT = "thing/product/{gateway_sn}/events"

    // 云平台对设备事件的回复、处理结果
    const val EVENTS_REPLY_MESSAGE_STRUCT = "thing/product/{gateway_sn}/events_reply"

    // 设备端向云平台发送请求，为了获取一些信息，比如上传的临时凭证
    const val REQUESTS_MESSAGE_STRUCT = "thing/product/{gateway_sn}/requests"

    // 云平台对设备请求的回复
    const val REQUESTS_REPLY_MESSAGE_STRUCT = "thing/product/{gateway_sn}/requests_reply"

    // 设备上下线、更新拓扑
    const val STATUS_MESSAGE_STRUCT = "sys/product/{gateway_sn}/status"

    // 平台响应
    const val STATUS_REPLY_MESSAGE_STRUCT = "sys/product/{gateway_sn}/status_reply"

    // 设备属性设置。设备属性是否可以被修改，在设备属性章节通过“accessMode”标识符号判断，accessMode = rw 表示可被读写。
    const val PROPERTY_SET_MESSAGE_STRUCT = "thing/product/{gateway_sn}/property/set"

    // 设备属性设置的响应
    const val PROPERTY_SET_REPLY_MESSAGE_STRUCT = "thing/product/{gateway_sn}/property/set_reply"

    // DRC 协议上行
    const val DRC_MESSAGE_STRUCT_UP = "thing/product/{gateway_sn}/drc/up"

    // DRC 协议下行
    const val DRC_MESSAGE_STRUCT_DOWN = "thing/product/{gateway_sn}/drc/down"

    // 网关设备的序列号，发送该消息的网关设备的序列号
    const val GATEWAY_SN = "gateway_sn"
}